package cn.edu.cug.cs.gtl.docdb.core.impl;

import cn.edu.cug.cs.gtl.common.Identifier;
import cn.edu.cug.cs.gtl.common.Pair;
import cn.edu.cug.cs.gtl.docdb.core.DocMeta;
import cn.edu.cug.cs.gtl.docdb.core.DocRaw;
import cn.edu.cug.cs.gtl.docdb.core.DocStore;
import cn.edu.cug.cs.gtl.docdb.core.DocUpdater;
import cn.edu.cug.cs.gtl.protos.Document;

import java.io.IOException;
import java.sql.SQLException;

public class DocUpdaterImpl implements DocUpdater {
    DocStore docStore;

    public DocUpdaterImpl(DocStore docStore) {
        this.docStore = docStore;
    }

    /**
     *
     * @param doc
     * @return
     * @throws Exception
     */
    @Override
    public boolean update(Pair<DocMeta, DocRaw> doc) throws Exception {
        Identifier identifier = docStore.getStorageManager().write(doc.second().getInternalIdentifier().longValue(), doc.second().storeToCompressBytes());
        doc.first().setIdentifier(identifier);
        DocMeta.update(docStore.getConnection(),doc.first());
        return true;
    }

    /**
     * 将文档插入到文档库中,文档的分类目录必须先设定好，否则无法进行文档按照目录进行检索
     * @param doc
     * @return
     * @throws Exception
     */
    @Override
    public boolean insert(Pair<DocMeta, DocRaw> doc) throws Exception {
            Identifier identifier = docStore.getStorageManager().append(doc.second().storeToCompressBytes());
            doc.first().setIdentifier(identifier);
            DocMeta.insert(docStore.getConnection(),doc.first());
            return true;
    }
}
